約 3,159,620 件
https://w.atwiki.jp/bambooflow/pages/66.html
リセット動作 SystemC v2.1では、リセット動作を記述できるプロセスは、SC_METHODとSC_CTHREADだけ。 SC_THREADでのリセット動作の実現はやってやれないこともないと思うが、現状難しいと思う。 でも、のちのちのヴァージョンではSC_CTHREADは廃止されてSC_THREADでリセット動作も可能になるかも。 SC_METHODでのリセット動作 カウンタ クロック数をカウントする。 入力はクロック信号、リセット信号で、出力はカウンタ数である。 入力reset_xがfalseのとき、内部カウンタctrは0にクリアされる。 入力reset_xがtrueのとき、内部カウンタはクロックの立ち上がりでインクリメントされる。 #include systemc.h SC_MODULE(COUNTER) { sc_in_clk clk; sc_in bool reset_x; sc_out int ctr; void process() { if (!reset_x) { ctr = 0; } else { ctr++; } } SC_CTOR(COUNTER) { SC_METHOD(process); sensitive clk.pos(); } };
https://w.atwiki.jp/bambooflow/pages/119.html
チャネル チャネルチャネルとは プリミティブチャネルsc_prim_channelについて 用意されているプリミティブチャネル一覧 チャネルとポートの接続対応表 sc_signalとsc_bufferの違いは? sc_clockは何チャネル? 階層チャネルsc_channelについて まとめ チャネルとは SystemCは、モジュール間の信号通信に"チャネル"という概念を提供して接続する機構を持たせている。 チャネルとモジュール間は、インターフェースとポートを介して接続する。 チャネルはインターフェースを実装(継承)する。モジュール側がそのインターフェースを持ったポートによりチャネルにアクセスすることができる。 Verilogだとwireで信号を接続するが、チャネルはwireのように単純な接続から内部に調停するような機構を持たせた複雑なものも表現できる。 チャネルはSystemCライブラリにいくつか用意されているが、ユーザが各自設計することができる。 チャネルには大きく分けて2種類ある。 プリミティブチャネル(primitive channel) 階層チャネル(hierarchical channel) プリミティブチャネルと階層チャネルの違いは、チャネル内にプロセスを持っているか持っていないかである。 プロセスを持っていないチャネルが、プリミティブチャネルで、 プロセスを持っているチャネルが、階層チャネルである。 プリミティブチャネル sc_prim_channelについて プリミティブチャネルはsc_prim_channelを継承している。 ユーザがプリミティブチャネルを作ることはまずない。 用意されているプリミティブチャネル一覧 sc_signal<type> 信号(プロセス間、子モジュール間との通信用) sc_buffer<type> sc_signalと同じ、値の書き込み時必ずイベント発生 sc_fifo<type> FIFOバッファつき入出力チャネル(使い方) sc_signal_resolved 1ビット幅の解決済み信号 sc_signal_rv<W> ビット幅Wをもつ解決済み信号 sc_semaphore 排他制御チャネル sc_mutex チャネルとポートの接続対応表 チャネルとポートの接続対応は次のとおり。 入力側 チャネル 出力側 sc_port sc_signal_in_if X sc_signal X sc_buffer X sc_port sc_signal_out_if X sc_port sc_signal_inout_if X sc_port sc_signal_inout_if X sc_in X sc_out X sc_inout X sc_inout X sc_in bool sc_clock sc_in_resolved sc_signal_resolved sc_out_resolved sc_inout_resolved sc_inout_resolved sc_in_rv W sc_signal_rv W sc_out_rv W sc_inout_rv W sc_inout_rv W sc_port sc_fifo_in_if X sc_fifo X sc_port sc_fifo_out_if X sc_fifo_in X sc_fifo_out X X 型(bool,unsigned char,int,sc_uint , sc_int , etc.) W ビット幅(int型) アクセス側 チャネル sc_port sc_mutex_if sc_mutex sc_port sc_semaphore_if sc_semaphore sc_signalとsc_bufferの違いは? sc_signalとsc_bufferの違いは、値が変化する/しないに関係なく書き込み時に毎回イベントが発生するか/しないかである。 値が変化したときのみイベントが発生するのは、sc_signal 値を書き込み時毎回イベントが発生するのは、sc_buffer 例 sc_signal int sig_data; sc_buffer int buf_data; //初期値はどちらも"0"とする。 for (int i=0; i 10; i++) { sig_data.write( 1 ); // sc_signalに10回"1"を書き込む buf_data.write( 1 ); // sc_bufferに10回"1"を書き込む } //////////////////////////////////////// sc_in int sig_data; sc_in int buf_data; int cntr1; int cntr2; SC_CTOR( MOD ) cntr1(0), cntr2(0) // カウンタの初期値を"0"にする { SC_METHOD( proc1 ); sensitive sig_data; // sc_signal SC_METHOD( proc2 ); sensitive buf_data; // sc_buffer } void proc1() { ++cntr1; printf( "cntr1 = %d\n", cntr1 ); // sc_signal } void proc2() { ++cntr2; printf( "cntr2 = %d\n", cntr2 ); // sc_buffer } 2つの信号(sig_data, buf_data)に毎回"1"を書き込んだとき、 sc_signalははじめの書き込み時の1回だけイベントが発生する。 sc_bufferは毎回の書き込み時、イベントが発生する。 したがって、cntr1の値は最後は"1"となり、cntr2の値は"10"となる。 sc_bufferはsc_signalを継承している。したがって、扱い方はほぼ同じといってよい。 ただし、2つのチャネルを併用したモデルは混乱するもとなので、片方のチャネルに統一して使ったほうがよい。 ただ、実際の設計では理想的にいかないかもしれないが。 sc_clockは何チャネル? sc_clockはどうなのだろう? sc_signal bool 型を継承しているので、一応sc_prim_channelを継承していることになるのでプリミティブ?でも、クロックを供給しているから、やっぱり階層チャネルの分類になるんだろうか? ポート、階層、SC_METHOD、SC_THREAD等はないので、やはりプリミティブとみてよいのかも。 階層チャネル たとえば、バスプロトコルを設計するときに、複数のターゲッタを調停するためのアービタを設けたりする。そういったときに、チャネルにプロセスを持たせてアービタを実装する方法がある。 このとき、プロセスを持つチャネルのことを階層チャネルと呼ぶ。 階層チャネルはSystemCライブラリでは提供されていない?ので、ユーザが各自で設計することになる。 チャネルのクラスを定義するには sc_channel を継承する。 sc_channelについて チャネルはsc_channelを継承する。 sc_channelはsc_module.hの544行目に以下のように記述されている。 typedef sc_module sc_channel; つまり、「sc_module = sc_channel」であるためチャネルはモジュールと同じ扱いができる。 違いは、モジュールは自らが動作する。 それに対してチャネルはモジュールからのアクセスを受けることで動作する。 チャンネルはインタフェースを実装する。 まとめ チャネルを理解するためには次の内容が区別できているかが重要になる。 チャネル インターフェース ポート ここでは、インタフェースとポートにはほとんど触れなかったが。。。
https://w.atwiki.jp/bambooflow/pages/115.html
SystemC波形出力 SystemC波形出力VCD波形ファイル出力 WIF波形出力 波形表示ツール波形表示ツール(GTKWave) for Linux,Cygwin 波形表示ツール(Wave VCD) for Windows 波形表示ツール(CvSDL) for Windows 波形出力の設定は、sc_mainとか、検証環境用のファイル内に記述する。 簡単なのはsc_main内に記述する方法。 TLMベースでは波形はほとんど見ないと思う。BCAのバス設計時は見ると思う。 sc_trace sc_trace_filevcd_trace_file wif_trace_file VCD波形ファイル出力 sc_main記述例 #include systemc.h #include "TOP.h" int sc_main(int argc, char* argv[]) { sc_clock CLK( "CLK", 10, SC_NS ); TOP *top = new TOP("TOP"); // モジュール実体化 #ifdef SYSC_DUMP_VCD_FILE sc_trace_file *trace_f; trace_f = sc_create_vcd_trace_file( "systemc" ); // 出力ファイル名を指定する(systemc.vcd) //((vcd_trace_file*)trace_f)- sc_set_vcd_time_unit(-9); // ns(ナノ秒)単位 trace_f- set_time_unit( 1.0, SC_NS ); // timescale 1ns(ナノ秒)単位 (v2.2.0) sc_trace( trace_f, CLK, "CLK" ); //CLKを波形ファイル出力として指定 sc_trace( trace_f, TOP- in_data, "TOP.in_data" ); //下位階層の信号を指定 // sc_trace ・・・ #endif // SYSC_DUMP_VCD_FILE sc_start(); // シミュレーション開始 #ifdef SYSC_DUMP_VCD_FILE sc_close_vcd_trace_file( trace_f ); #endif // SYSC_DUMP_VCD_FILE return 0; } TOPモジュールの実体化(すべてのモデル実体化)のあとに設定する。 sc_start()実行よりも前に設定する。 波形出力できるのは、sc_in , sc_out , sc_signal で普通の変数は表示できない。 シミュレーション実行が終了すると、波形ファイル"systemc.vcd"が出力される。 波形出力の有無の切り替えを#ifdef ~#endifでできるようにすると検証しやすくなる。 Makefileのコンパイルオプションで"-DSYSC_DUMP_VCD_FILE"をつけると波形ファイルが出力される。 WIF波形出力 この波形ファイル形式はよく知らない。 とりあえずVCDと同じように設定すればよい。 以下の点が異なる。単純に"vcd"だったのを"wif"とすればよい。 sc_trace_file *trace_f; trace_f = sc_create_wif_trace_file( "systemc" ); // 出力フェイル名を指定する //((wif_trace_file*)trace_f)- sc_set_vcd_time_unit(-9); // ns(ナノ秒)単位 trace_f- set_time_unit( 1.0, SC_NS ); // 1ns(ナノ秒)単位 (v2.2.0) ・・・ sc_close_wif_trace_file(tf);
https://w.atwiki.jp/bambooflow/pages/127.html
SystemC マクロ SystemCライブラリのマクロについて、メモ書き。 こんなのがあるよ、っていうのを一覧。とくに説明はかかない。 SC_INCLUDE_FX SC_INCLUDE_DYNAMIC_PROCESSES SC_USE_SC_STRING_OLD このマクロが有効のとき、sc_string を sc_string_old と定義 SC_USE_STD_STRING このマクロが有効のとき、sc_string を std string と定義 SC_FX_EXCLUDE_OTHER SC_STOP_FINISH_DELTA SC_USE_PTHREADS SC_DT_MIXED_COMMA_OPERATORS SC_DT_DEPRECATED SC_ENABLE_OBSERVERS SC_MAX_NBITS SC_SIGNED SC_UNSIGNED SC_REPORT_ERROR() SC_REPORT_WARNING SC_REPORT_INFO() SC_DEFINE_MESSAGE SC_HAS_PROCESS SC_ASSERT_ SC_FXNUM_OBSERVER_READ_ SC_FXNUM_OBSERVER_WRITE_ SC_FXNUM_FAST_OBSERVER_READ_ SC_FXNUM_FAST_OBSERVER_WRITE_ SC_FXDIV_WL SC_ASSERT_
https://w.atwiki.jp/bambooflow/pages/65.html
SystemCコンパイルのためのGNU-Makefile書き方メモ 書き方なんてひとそれぞれですが、以外とMakefile書くのも面倒なのでメモ書きします. コンパイルするときは、ここからコピペで使用すればOK. SystemCコンパイルのためのGNU-Makefile書き方メモ単純なコンパイル方法 シンプルなMakefile Makefile.defsを利用するMakefile.defs Makefile 作業ディレクトリ構成 お気に入りMakefileメモ 単純なコンパイル方法 test.cpp1つをコンパイルする方法。 $ g++ -I/usr/local/systemc-2.2/include -c test.cpp $ g++ -I/usr/local/systemc-2.2/lib-linux -lsystemc -lm -o run.x test.o シンプルなMakefile メイクファイルは以下のように用意する。 CC = g++ SYSTEMC = /usr/local/systemc-2.1 INCDIR = -I. -I$(SYSTEMC)/include LIBDIR = -L. -L$(SYSTEMC)/lib-linux LIBS = -lsystemc -lm CFLAGS = -O2 -Wall TARGET = run.x SRCS = adder.cpp tb.cpp main.cpp OBJS = $(SRCS .cpp=.o) all $(TARGET) $(TARGET) $(OBJS) $(CC) -o $@ $(LIBDIR) $(LIBS) $(OBJS) .cpp.o $(CC) $(CFLAGS) $(INCDIR) -c $ clean @rm -f *.o $(TARGET) 環境等で変更が必要なのは、"SYSTEMC"のライブラリの場所指定と、"SRCS"のコンパイルするファイル指定の箇所。 Makefile.defsを利用する メイクファイルからMakefile.defsをインクルードして使う方法がある。 Makefile.defは展開したsystemc-2.2.0.tgzの以下にある。 systemc-2.2.0/examples/sysc/Makefile.defs これを利用すればメイクファイルの共通した記述を省略できる。 Makefile.defs Makefile.defsは以下のようになっている。 Makefile.defs SYSTEMC = /usr/local/systemc-2.2 INCDIR = -I. -I$(SYSTEMC)/include LIBDIR = -L. -L$(SYSTEMC)/lib-$(TARGET_ARCH) LIBS = -lsystemc -lm $(EXTRA_LIBS) EXE = $(MODULE).x .SUFFIXES .cc .cpp .o .x $(EXE) $(OBJS) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2 1 | c++filt .cpp.o $(CC) $(CFLAGS) $(INCDIR) -c $ .cc.o $(CC) $(CFLAGS) $(INCDIR) -c $ clean rm -f $(OBJS) *~ $(EXE) core ultraclean clean rm -f Makefile.deps Makefile.deps # $(CC) $(CFLAGS) $(INCDIR) -M $(SRCS) Makefile.deps #include Makefile.deps 環境等で変更が必要なのは、"SYSTEMC"のライブラリの場所指定。 Makefile 追加するメイクファイルは以下のようにする。 Makefile(例) CC = g++ CFLAGS = -Wall -g EXTRA_LIBS = -O2 TARGET_ARCH = linux # target name MODULE = run SRCS = test.cpp OBJS = $(SRCS .cc=.o) include ../Makefile.defs 作業ディレクトリ構成 作業ディレクトリは以下のようになる。 Sysc/ |-- Makefile.defs # 共通して使う |-- sample01 | |-- Makefile # sample01用に作成 | |-- test.cpp |-- sample02 | |-- Makefile # sample02用に作成 | |-- test.cpp `-- sample03 ・・・ お気に入りMakefileメモ とりあえず、コンパイルしたい場合は、下記のMakefileで十分かと。 make all を実行すると、$(wildcard *.cpp)によりmakeを実行したディレクトリ上の.cppファイルを探してコンパイルします。 コンパイルが完了すると、TARGET名であるrun.x実行ファイルができあがります。 オブジェクトファイル(.o)はobjsディレクトリに生成されるようにしました。 そのほうがすっきりするので。 ###################################################################### # SystemC Makefile ###################################################################### CXX = g++ TARGET = run.x OBJDIR = objs # coverage option #GCOV_OPT = -coverage # Source File SRCS = $(wildcard *.cpp) OBJS = $(SRCS .cpp=.o) OBJS = $(addprefix $(OBJDIR)/,$(OBJS)) ###################################################################### # SystemC setting SYSTEMC = /usr/local/systemc-2.2.0 SYSC_INC = -I. -I$(SYSTEMC)/include SYSC_LIB = -L. -L$(SYSTEMC)/lib-linux -lsystemc ###################################################################### # Compile option setting CXXFLAGS = -O2 -Wall CXXFLAGS += $(GCOV_OPT) CXXFLAGS += $(SYSC_INC) CXXLIBS = -lm CXXLIBS += $(SYSC_LIB) ###################################################################### # Compile setting all $(TARGET) $(TARGET) $(OBJS) $(CXX) $(GCOV_OPT) -o $@ $^ $(CXXLIBS) $(OBJDIR)/%.o %.cpp @[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR) $(CXX) -c $(CXXFLAGS) -o $@ $ clean rm -f *~ $(OBJDIR)/*.o $(TARGET) 昔は、.cpp.o を使うようでしたが、最近では%.o %.cppを使うみたいです。 あと、カバレッジのオプションを付けてみました.(-coverage) 実行する際は、最適化オプション(-O)ははずしたほうがよいです。 古いコンパイラだとだと、-fprofile-arcs -ftest-coverageでしょうか。 gcov xxx.gcda 以上
https://w.atwiki.jp/bambooflow/pages/144.html
コアとなる言語クラス定義 コアとなる言語クラス定義ヘッダファイル コアクラス一覧 用意されたチャネルクラス定義チャネルクラス一覧 チャネル接続の対応表 ヘッダファイル SystemCを使うには次のヘッダファイルをインクルードする。 #include "systemc.h" #include "systemc.h" #include "systemc" #include "systemc" using sc_core sc_module; using sc_core sc_signal; using sc_core SC_NS; using sc_core sc_start; using sc_dt sc_logic; #include iostream using std ofstream; using std cout; using std endl; コアクラス一覧 sc_module sc_module_name sc_sensitive sc_spawn_optionsとsc_spawn sc_process_handle sc_event_finderとsc_event_finder_t sc_event_and_listとsc_event_or_list sc_evnet sc_time sc_port sc_export sc_interface sc_prim_channel sc_object sc_attr_base sc_attribute sc_attr_cltn 用意されたチャネルクラス定義 チャネルクラス一覧 sc_signal_in_if sc_signal_in_if<bool>とsc_signal_in_if<sc_dt sc_logic> sc_signal_inout_if sc_signal sc_signal<bool>とsc_signal<sc_dt sc_logic> sc_buffer sc_clock sc_in sc_in<bool>とsc_in<sc_dt logic> sc_inout sc_inout<bool>とsc_inout<sc_dt sc_logic> sc_out sc_signal_resolved sc_in_resolved sc_sc_inout_resolved sc_out_resolved sc_signal_rv sc_in_rv sc_inout_rv sc_out_rv sc_fifo_in_if sc_fifo_out_if sc_fifo sc_fifo_in sc_fifo_out sc_mutex_if sc_mutex sc_semaphore_if sc_semaphore sc_event_queue チャネル接続の対応表 入力 チャネル 出力 sc_port sc_signal_in_if X sc_signal X sc_buffer X sc_port sc_signal_out_if X sc_port sc_signal_inout_if X sc_port sc_signal_inout_if X sc_in X sc_out X sc_inout X sc_inout X sc_in bool sc_clock sc_in_resolved sc_signal_resolved sc_out_resolved sc_inout_resolved sc_inout_resolved sc_in_rv W sc_signal_rv W sc_out_rv W sc_inout_rv W sc_inout_rv W sc_port sc_fifo_in_if X sc_fifo X sc_port sc_fifo_out_if X sc_fifo_in X sc_fifo_out X X 型(bool,unsigned char,int,sc_uint , sc_int , etc.) W ビット幅 アクセス チャネル sc_port sc_mutex_if sc_mutex sc_port sc_semaphore_if sc_semaphore
https://w.atwiki.jp/bambooflow/pages/135.html
クロックカウンタを作る ここでは、クロックカウンタを作成することで、モジュール作成、プロセスの作成等について説明する。 クロックカウンタを作るサンプル コンパイル/実行実行結果 モデル説明階層構造 クロックカウンタ・入出力信号 ソースコード内容ClcokCounter.h ClockCounter.cpp main.cpp サンプル clock_counter.tgz main.cpp ClockCounter.h ClockCounter.cpp Makefile コンパイル/実行 $ make == コンパイル $ ./run.x == シミュレーション実行 実行結果 SystemC 2.2.0 --- Jun 28 2008 10 19 12 Copyright (c) 1996-2006 by all Contributors ALL RIGHTS RESERVED Note VCD trace timescale unit is set by user to 1.000000e-09 sec. 0 s CntOut = 0 10 ns CntOut = 1 60 ns CntOut = 6 195 ns CntOut = 20 232 ns CntOut = 24 732 ns CntOut = 74 実行すると10nsごとにCntOutが1加算されている。 クロックは、10nsの周期となっている。 モデル説明 階層構造 sc_main |=== clockCounter(ClockCounter) クロックカウンタ・入出力信号 方向 型 信号名 説明 input bool clk クロック入力 output unsigned int CntOut クロックカウント値出力 ソースコード内容 ClcokCounter.h #ifndef __CLOCK_COUNTER_H #define __CLOCK_COUNTER_H #include systemc.h SC_MODULE( ClockCounter ) { //-- ports ----------------------------------------------------// sc_in_clk clk; sc_out unsigned int CntOut; //-- signals --------------------------------------------------// //-- variables ------------------------------------------------// //-- process functions ----------------------------------------// void main_thread(); //-- functions ------------------------------------------------// // constructor SC_HAS_PROCESS( ClockCounter ); ClockCounter( sc_module_name ); }; #endif /* __CLOCK_COUNTER_H */ "#include systemc.h "でSystemCライブラリのヘッダをインクルード SC_MODULEにてClockCounterモジュールを定義 クロック信号clkを入力ポートとして定義 クロックカウント値を出力するためのCntOut信号を出力ポートとして定義 プロセス間数となるmain_proc関数を定義 コンストラクタを定義プロセスを持つモジュールのためSC_HAS_PROCESSを定義 ClockCounter.cpp #include "ClockCounter.h" // constructor ClockCounter ClockCounter( sc_module_name name ) sc_module( name ) , clk( "clk" ) , CntOut( "CntOut" ) { // process setting SC_THREAD( main_thread ); //sensitive clk.pos(); } void ClockCounter main_thread() { unsigned int cnt = 0; CntOut.write( 0 ); while (true) { //wait(); wait( clk.posedge_event() ); ++cnt; CntOut.write( cnt ); } } コンストラクタ記述内SC_MODULEによりsc_moduleを継承するので、sc_moduleの初期化を記述 main_proc関数をSC_THREADに指定 プロセス関数main_proc記述内クロックカウント値を保持する変数cntを用意、初期値ゼロに設定 CntOut信号の出力を初期値ゼロに設定 無限ループ*while(true))を記述wait関数によりクロックの立上りを待つ カウント値のインクリメントしたらCntOutへ出力 main.cpp #include systemc.h #include "ClockCounter.h" int sc_main( int argc, char* argv[] ) { ClockCounter *clockCounter; // signals sc_clock clk( "clk", 10.0, SC_NS ); sc_signal unsigned int CntOut; // module instance binding clockCounter = new ClockCounter( "ClockCounter" ); sc_assert( clockCounter ); clockCounter- clk( clk ); clockCounter- CntOut( CntOut ); ///////////////////////////////////////////////////////////////////////// // vcd dump sc_trace_file *trace_f; trace_f = sc_create_vcd_trace_file( "systemc" ); // 出力フェイル名を指定する sc_assert( trace_f ); trace_f- set_time_unit( 1.0, SC_NS ); sc_trace( trace_f, clk, "clk" ); sc_trace( trace_f, CntOut, "CntOut" ); ///////////////////////////////////////////////////////////////////////// // initialize sc_start( SC_ZERO_TIME ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; // simulation sc_start( 10.0, SC_NS ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; sc_start( 50.0, SC_NS ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; sc_start( 135.0, SC_NS ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; sc_start( 37.0, SC_NS ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; sc_start( 500.0, SC_NS ); cout sc_time_stamp() " " "CntOut = " CntOut.read() endl; ///////////////////////////////////////////////////////////////////////// delete clockCounter; sc_close_vcd_trace_file( trace_f ); return 0; } systemc.hヘッダファイルをインクルード ClockCounter.hヘッダファイルをインクルード メイン関数としてsc_mainを使用 sc_clockによりクロックを作成、周期は10nsに設定 CntOut信号を受け取るsc_signalを用意 ClockCounterをインスタンスする clockCounterのclk,CntOut信号を接続 波形出力設定, ファイルはVCD形式,clk,CntOut信号を出力対象とする シミュレーション実行sc_start(SC_ZERO_TIME)ですべてのプロセスで最初のwaitまで実行 sc_start実行後、CntOut信号出力を表示、10nsごとに1カウント去れていることを確認
https://w.atwiki.jp/bambooflow/pages/126.html
Visual C++ 2008 Express EditionへのSystemCライブラリ インストール Windows XPでのVisual C++ 2008 Expres EditionへのSystemCインストールをしてみた。 プロジェクトファイルは(バージョンは違うが)すでに用意されているのでそれを使う。 Visual C++ 2008 Express EditionへのSystemCライブラリ インストールSystemC2.2インストールフォルダ展開 プロジェクトファイル実行 プロジェクトファイルの設定・確認 コンパイル(ビルド) インストール 設定のまとめ SystemC2.2インストール フォルダ展開 C \にsystemc-2.2.0フォルダを展開。 プロジェクトファイル実行 C \systemc-2.2.0\mscv71\SystemCフォルダへ移動して、SystemC.vcprjをダブルクリック。 変換ウィザードが実行されるので、次へをクリック。 変換前にバックアップを作成するで、次へをクリック。 完了をクリック。 閉じるをクリック。 準備完了。 プロジェクトファイルの設定・確認 メニューのプロジェクトからプロパティを選択。 全般、構成の種類が"スタティック ライブラリ(.lib)"であることを確認。 出力ディレクトリ、中間ディレクトリは"Debug"であることを確認。 デバッグ、特に設定無し。 C/C++の全般、追加インクルードディレクトリの設定が"../../src"となっていることを確認。 64ビット移植への対応は"いいえ"であることを確認。 C/C++の最適化、特に設定無し。 最適化は今回、"無効(/Od)"としたが、最適化してもよい。 C/C++のプリプロセッサ、プロセッサの定義で"WIN32;_DEBUG;_LIB;SC_INCLUDE_FX"となっていることを確認。 C/C++のコード生成、簡易リビルドを行うは"いいえ"を選択。 ランタイムライブラリは"マルチスレッド デバッグ(/MTd)"であることを確認。 C/C++の言語、ランタイム型情報を有効にするは"はい"であることを確認。 C/C++のプリコンパイル済みヘッダー、プリコンパイル済みヘッダの作成/使用は"プリコンパイル済みヘッダーを使用しない"であることを確認。 C/C++の出力ファイル、特に設定無し。 C/C++のブラウザ情報、特に設定無し。 C/C++の詳細、指定の警告を無効にするは、"4224;4996"と変更。(しなくてもコンパイルはできるが警告メッセージがうるさい) C/C++のコマンド ライン、設定が正しいかどうか、もう一度確認。 ライブラリアンの全般、出力ファイルが"$(OutDir)/SystemC.lib"となっていることを確認。 コンパイル(ビルド) メニューのビルドからソリューションのビルドを選択して、コンパイル開始。( F7 でもOK) コンパイルが正常に終了したことを確認。 C \systemc-2.2.0\mvc71\SystemC\Debugフォルダ下にSystemC.libが生成されていることを確認。 これで、コンパイル完了。 今回は、とりあえずSystemCが実行できればいいかな程度の設定。 最適化とかはおこのみで。 インストール 設定のまとめ 以下のプロパティ設定を確認する。 全般、構成の種類が"スタティック ライブラリ(.lib)"であることを確認。 出力ディレクトリ、中間ディレクトリは"Debug"であることを確認。 C/C++の全般、追加インクルードディレクトリの設定が"../../src"となっていることを確認。 C/C++のプリプロセッサ、プロセッサの定義で"WIN32;_DEBUG;_LIB;SC_INCLUDE_FX"となっていることを確認。 C/C++のコード生成、簡易リビルドを行うは"いいえ"を選択。 C/C++のコード生成、ランタイムライブラリは"マルチスレッド デバッグ(/MTd)"であることを確認。 C/C++の言語、ランタイム型情報を有効にするは"はい"であることを確認。 C/C++の詳細、指定の警告を無効にするは、"4224;4996"と変更。(しなくてもコンパイルはできるが警告メッセージがうるさい) ライブラリアンの全般、出力ファイルが"$(OutDir)/SystemC.lib"となっていることを確認。 テストプログラム、HelloWorldのコンパイル・実行へ
https://w.atwiki.jp/bambooflow/pages/121.html
SystemCの抽象度(抽象レベル) SystemCの抽象度(抽象レベル)TLM標準化団体ごとの抽象レベル定義OSCIが提唱する抽象レベル OCP-IPが提唱する抽象レベル GreenSocsが提唱する抽象レベル STARCが提唱する抽象レベル その他の抽象レベル TLM標準化団体ごとの抽象レベル定義 OSCIが提唱する抽象レベル PV(Programmers View) PVT(Programmers View with Timing) CC(Cycle Callable) OCP-IPが提唱する抽象レベル OCP/TL3(OCP Transaction Level 3) OCP/TL2(OCP Transaction Level 2) OCP/TL1(OCP Transaction Level 1) OCP/TL0(OCP Transaction Level 0) GreenSocsが提唱する抽象レベル PV(Programmers View) PVT(Programmers View with Timing) CC(Cycle Callable) RTL(Register Transfer Level) STARCが提唱する抽象レベル UTTR(Un-timed Transaction) ATTR(Approximately-timed Transaction) ATBP(Approxymately-timed Bus-Phase) CABC(Cycle-accurate Bus-Cycle) CABS(Cycle-accurate Bus-Signal) データの粒度とタイミング精度から抽象レベルを分類する。 その他の抽象レベル UTF(Untimed Functional)モデル TF(Timed Functional)モデル BCA(Bus Cycle Accurate)モデル CA(Cycle Accurate)モデル
https://w.atwiki.jp/bambooflow/pages/132.html
SystemC Visual C++ Express Edition Visual C++ Express Editionでの実行の仕方とかをここにメモ書きとしてまとめる。 HelloWorldインストール